﻿/*
 * Copyright (c) 2014-2024 GraphDefined GmbH <achim.friedland@graphdefined.com>
 * This file is part of WWCP Core <https://github.com/OpenChargingCloud/WWCP_Core>
 *
 * Licensed under the Affero GPL license, Version 3.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.gnu.org/licenses/agpl.html
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#region Usings

using System.Collections.Concurrent;

using org.GraphDefined.Vanaheimr.Illias;
using org.GraphDefined.Vanaheimr.Hermod.DNS;

using cloud.charging.open.protocols.WWCP.Networking;
using org.GraphDefined.Vanaheimr.Hermod.HTTP;

#endregion

namespace cloud.charging.open.protocols.WWCP.MobilityProvider
{

    public class VirtualSmartPhone
    {

        #region Data

        private EMobilityProviderAPIClient? HTTPClient;

        #endregion

        #region Properties

        public URL? ServerURL { get; private set; }

        #endregion

        #region Constructor(s)

        public VirtualSmartPhone() {
        }

        #endregion


        public void Connect(URL ServerURL)
        {
            this.ServerURL = ServerURL;
        }


        public async Task<RemoteStartResponse> RemoteStart(RemoteStartRequest Request)
        {

            RemoteStartResponse? response = null;

            if (ServerURL.HasValue)
            {

                response = await new EMobilityProviderAPIClient(ServerURL.Value).RemoteStart(Request);

            }
            else {

                response = new RemoteStartResponse(
                               Request,
                               RemoteStartResultTypes.Offline,
                               EventTracking_Id.New,
                               Timestamp.Now
                           );

            }

            return response;

        }

        public async Task<RemoteStopResponse> RemoteStop(RemoteStopRequest Request)
        {

            RemoteStopResponse? response = null;

            if (ServerURL.HasValue)
            {

                response = await new EMobilityProviderAPIClient(ServerURL.Value).RemoteStop(Request);

            }
            else
            {

                response = new RemoteStopResponse(
                               Request,
                               RemoteStopResultTypes.Offline,
                               EventTracking_Id.New,
                               Timestamp.Now,
                               Request.ChargingSessionId
                           );

            }

            return response;

        }


    }

}
